/*
 * arpamessage.h
 *
 *  Created on: 22/apr/2014
 *      Author: kappa
 */

#ifndef ARPAMESSAGE_H_
#define ARPAMESSAGE_H_
/*Cosa deve fare? Deve leggere gli header, leggere il msg
 * Gli heaeder sono del tipo header-name:header-value
 * Ogni coppia header-valore � separata dalle altre coppie da LF
 * il messaggio � separato dagli header da un CRLF
 * la fine del messaggio � data da CRLF.CRLF
 * */


/***
 * Header del messaggio
 */
#define FROM "From"
#define FROM_SP "From "
#define DATE "Date"
#define SENDER "Sender"
#define MSG_ID "Message-ID"
#define TO "To"
#define SUBJECT "Subject"


/*Separatore*/
#define SEP ':'

/*Costanti di controllo*/
#define CRLF "\r\n"
#define DOT_CRLF ".\r\n"

#define MAX_MSG_SIZE 1024*1024 + 256


typedef struct ArpaMessage{
	//char *sysfrom;
	char *from;
	char *date;
	char *to;
	char *msg_id;
//	char *subject;
	char * body;

	int isDeleted;
	int octets;
	struct ArpaMessage *next;
}ARPAMESSAGE;

//typedef enum MSG_PROP{MNONE,MFROM, MDATE, MTO, MID, MSBJ, MDATA} MSGPROPS;

typedef ARPAMESSAGE * ARPAMSG;

ARPAMSG readMBox(void *);
int getNextMsgId(void *);
int writeMBox(void *, ARPAMSG, int);
ARPAMSG removeDeletedMsg(ARPAMSG);
ARPAMSG getMsg(ARPAMSG, char *);
char *getMsgListChar(ARPAMSG);
int countMsg(ARPAMSG);
ARPAMSG undoDeleteMsg(ARPAMSG);
ARPAMSG deleteMsg(ARPAMSG, char *);
void resetMsgList(ARPAMSG);
int getMailDropSize(ARPAMSG);
#endif /* ARPAMESSAGE_H_ */

